/**
 * 系统默认支持的对接模式
 * 【浏览器模式】 编码：browser
 * 【企业微信】   编码：enterprisesWechat
 * 【微信】       编码：wechat
 * 【钉钉】       编码：dingding
 */
import router from '@/router'
import { getServerMode } from '@/api/request/basic'
import store from '@/store'
import { mobileResultCode } from '@/assets/js/common'
import { dockingAuth } from '@/api/request/basic'
import { Toast } from 'vant'
import * as dd from 'dingtalk-jsapi'
/**
 * @description 采用系统提供的默认对接方式
 */
export const useSystemIntergration = () => {
	doIntergration()
}

const IntergrationStrategy = {
	   /**
			 * 非对接模式，浏览器直接访问
			 */
			browser: () => {
				router.push('login')
			},

	   /**
      * 企业微信
      */
			 enterprisesWechat: () => {
				defaultDockingAuth(getUrlParam('code'))
			},

			/**
			 * 微信服务号授权对接
			 */
			 wechat: () => {
				defaultDockingAuth(getUrlParam('code'))
			},

			/**
			 * 钉钉
			 */
			 dingding: (servModeInfo) => {
				if (dd.env.platform === 'notInDingTalk') {
					console.error('当前为钉钉微应用模式，请在钉钉手机客户端中使用')
					return
				}
				dd.ready(() => {
					// 获取免登授权码
					dd.runtime.permission.requestAuthCode({
						corpId: servModeInfo['corpid'],
						onSuccess: info => {
							defaultDockingAuth(info.code)
						},
						onFail: (res) => {
							alert(JSON.stringify(res))
						}
					})
				})
			},
} 

const defaultDockingAuth = (code) => {
	dockingAuth({ code: code }).then((res) => {
		if (res.body.code === mobileResultCode.SUCCESS) {
			// 用户已绑定，跳转首页，记录用户数据
			const responseItem = res.body.data.item
			const userInfo = {
				token: responseItem.key,
				roles: responseItem.userGroups,
				userName: responseItem.userName,
			}
			store.dispatch('recordUserInfo', userInfo)
			store.dispatch('recordCurrentRole', responseItem.groupName)
			store.dispatch('recordMenus', responseItem.joinCheckModules.reverse())
			// 三方对接直接进入系统有两个入口，客户端按钮绑定跳转至首页，消息推送绑定跳转详情页
			const modelId = getUrlParam('modelId')
			if (modelId) {
				// 消息推送现支持跳转详情页查看审核结果
				router.push({
					name: `${modelId}Detail`,
					query:{ id: getUrlParam('itemId') }
				})
				return
			}
			router.push('index')
		} else if (res.body.code === mobileResultCode.WX_NEED_BIND_ACCOUNT) {
			// 尚未绑定，跳转至绑定页面
			// 为微信平台跳转做特殊处理，微信平台默认hash传递#导致后续router的hash路由异常
			const originUrl = window.location.href.split('?code')[0] + '#/'
			window.history.pushState(null, null, originUrl)
			router.push({
				name: 'loginScan', 
				query: {
					userId: res.body.data.item.bindUserId
				}
			})
		} else if (res.body.code === mobileResultCode.INTERNAL_ERROR || res.body.code === mobileResultCode.MISSING_PARAMETER) {
		   Toast.fail({
				 message: res.body.message,
				 duration: 6000
			 })	
		}
	})
}
/**
 * @description 
 * 获取系统对接模式，并根据模式执行响应对接策略
 */
const doIntergration = () => {
      getServerMode().then(response => {
			let servModeInfo
      if (response.body.code === '200' && (servModeInfo = response.body.data.item)) {
				// 缓存系统参数： 应用对接模式
				const systemConfig = store.getters.systemConfig
				systemConfig.servMode = servModeInfo.servMode
				store.dispatch('recordSystemConfig', systemConfig)
				IntergrationStrategy[servModeInfo.servMode](servModeInfo)
      } else {
        console.error('系统初始化异常')
      }
    })
  // }
}

/**
 * @description 根据属性名获取url中的参数
 * @param {String} name 属性名 
 * @returns 参数
 */
const getUrlParam = function (name) {
  return decodeURIComponent(
    (new RegExp(`[?|&]${name}=([^&;]+?)(&|#|;|$)`).exec(location.href) || [undefined, ''])[1].replace(/\+/g, '%20')) || null
}

